package com.lovo.javafxComponent;

import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.text.Font;

/**
 * 文本框组件
 * @author lenovo
 *
 */
public class LovoTxt extends TextField{
	/**验证正则表达式*/
	private String rexp;
	/**错误提示*/
	private String errorInfo;
	/**是否通过验证*/
	private boolean pass;
	/**错误提示标签*/
	private Label infoLabel = new Label("");

	/**
	 * 标题文本框组件
	 * @param title 标题
	 * @param x 组件X坐标
	 * @param y 组件Y坐标
	 * @param container 加入容器
	 */
	public LovoTxt(String title,int x,int y,Pane container) {
		Label label = new Label(title);
		label.setLayoutX(x);
		label.setLayoutY(y);
		label.setPrefWidth(100);
		label.setPrefHeight(20);
		label.setFont(new Font(16));
		
		
		this.setLayoutX(x + 100);
		this.setLayoutY(y);
		this.setPrefWidth(150);
		this.setPrefHeight(20);
		container.getChildren().add(label);
		container.getChildren().add(this);
	}
	
	/**
	 * 图片文本框构造方法
	 * @param x 组件X坐标
	 * @param y 组件Y坐标
	 * @param url 图片URL路径
	 * @param container 加入容器
	 */
	public LovoTxt(int x,int y,String url,Pane container) {
		new LovoImage(url, x, y, 50, 50, container);
		
		this.setLayoutX(x + 100);
		this.setLayoutY(y+10);
		this.setPrefWidth(150);
		this.setPrefHeight(30);
		container.getChildren().add(this);
	}
	
	/**
	 * 带验证的文本框
	 * @param title 标题
	 * @param x 组件X坐标
	 * @param y 组件Y坐标
	 * @param container 加入容器
	 * @param rexp 验证正则表达式
	 * @param errorInfo 错误提示
	 */
	public LovoTxt(String title,int x,int y,Pane container,String rexp,String errorInfo) {
		this(title,x,y,container);
		this.rexp = rexp;
		this.errorInfo = errorInfo;
		
		
		infoLabel.setFont(new Font(12));
		infoLabel.setLayoutX(x+100);
		infoLabel.setLayoutY(y+30);
		container.getChildren().add(infoLabel);
		
		if(rexp != null && errorInfo != null) {
			this.focusedProperty().addListener(new InvalidationListener() {
				
				@Override
				public void invalidated(Observable observable) {
					if(LovoTxt.this.isFocused() == false) {
						checkTxt();
					}
				}
			});
		}
		
	}
	
    private void checkTxt(){
        if(this.getText().matches(rexp) == true){
            pass = true;
            infoLabel.setTextFill(new Color(0,0,1,1));
            infoLabel.setText("验证通过");
        }
        else{
            pass = false;
            infoLabel.setTextFill(new Color(1,0,0,1));
            infoLabel.setText(this.errorInfo);
        }
    }

    /**
     * 判断验证是否通过
     * @return 验证是否通过
     */
    public boolean isPass(){
    	if(rexp != null && errorInfo != null) {
    		checkTxt();
    	}
        return this.pass;
    }
	
	
}
